package cn.tedu.apiday05;

import java.util.*;

//测试ArrayList
public class ArrayListAction {
    public static void main(String[] args) {
        //创建对象
        //特点： ArrayList底层维护了一个数组Object[]
        // 在jdk1.6里一旦创建ArrayList，底层立刻分配10个数组的长度
        //在jdk1.8里为了优化内存，并不会第一时间来分配10个空间 而是当你第一次向ArrayList中添加元素时，才开始分配空间，默认容量是10的数组--------延迟数组的初始化！！！

        ArrayList <String > list = new ArrayList<>();
        //调用方法
        list.add("1");
        list.add("2");//向集合中添加元素
        list.add("4");
        list.add("3");
        list.add("1");
        //特点 元素有序，运行重复元素，存放null元素
        System.out.println(list);
        //继承的方法
        System.out.println(list.contains("4"));//判断集合中是否包含指定元素
        System.out.println(list.equals("4"));//判断集合是否和指定元素相等
        System.out.println(list.hashCode());//获取集合在内存中的哈希码值
        System.out.println(list.isEmpty());//判断集合是否为空
        System.out.println(list.size());//获取集合中元素的个数
        System.out.println(list.remove("4"));//移除集合中的指定元素
        Object[] objects = list.toArray();//把集合转成数组
        System.out.println(Arrays.toString(objects));
        list.add(2,"100");//在指定下标处，插入指定元素
        System.out.println(list);
        System.out.println(list.get(4));//获取下标为4的位置对应的元素
        System.out.println(list.indexOf(2));//获取指定元素第一次出现的索引值
        System.out.println(list.lastIndexOf("1"));//获取指定元素最后一次出现的索引值
        System.out.println(list.remove(3));//删除下标为3的位置对应的元素
        System.out.println(list);
        System.out.println(list.set(3,"99"));//把下标为3 的元素换成99  置换元素
        System.out.println(list);
        List <String> list1 = list.subList(2,4);//从下标2开始到下标为4结束进行截取  含头不含尾
        System.out.println(list1);
        //迭代集合
        //第一种 CollectionAction接口的方法  Iterator <E> iterator()
//        Iterator<String> it = list.iterator();
//        while (it.hasNext()){//it.hasNext()判断集合里有没有元素，有的话返回true
//            String value = it.next();//next()获取元素
//            System.out.println(value+"========");
//        }
        //第二种 List接口的特有方法：ListIterator <E> listIterator()
        // Iterator <E> iterator() 和 ListIterator <E> listIterator()的返回值一个是父接口，一个是子接口
        //子接口丰富了遍历方式，除了可以顺序向后遍历，还扩展了逆向向前遍历
//        ListIterator<String> it1 = list.listIterator();
//        while (it1.hasNext()){//判断是否有后一个元素
//
//            System.out.println(it1.next());//获取后一个元素
//        }
        //第三种 list接口的特点是元素有下标，还可以按照下标获取元素
//        for (int i = 0; i <list.size() ; i++) {//list.size()获取集合中元素的个数
//            System.out.println(list.get(i));//list.get(i)根据下标获取元素           并且打印
//
//        }
        //第四种 增强for循环     foreach循环  用来优化普通的for循环，可以用于遍历数组，或者Collection集合的。好处高效而且语法简洁
        //语法：for(遍历得到的数据类型 变量名 ：你想要遍历的数组或者Collection集合){循环体}
//        for (String in:list) {//in就代表遍历得到的数据
//            System.out.println(in);
//        }
    }
}
